9.4k words
代码 代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980half3 ShaderGI(ToonSurfaceData surfaceData,ToonLightingData lightData){ half3 averageSH=SampleSH(0); averageSH=max(_IndirectLightMinColor,averageSH); return averageSH;}half3 ShadeSignleLight(ToonSurfaceData surfaceData,ToonLightingData lightData,Light light,bool isAdditionLight){ half3 N=normalize(lightData.nor...

SRP

8.3k words
Desc:可编辑渲染管线,可以据此自定义修改管线内容,也可以学习渲染管线中实现 UniversalRenderPipelineAsset渲染管线资源继承自 RenderPipelineAsset 类 RenderPipelineAsset.CreatePipelineRP 资产的主要目的是为 Unity 提供一种方法来获取负责渲染的管道对象实例.资产本身只是一个句柄和一个存储设置的地方该函数返回一个管道对象实例 UniversalRenderPipeline渲染管线实例继承自 RenderPipeline RenderPipeline.Render此方法是可编写脚本的渲染管道 (SRP) 的入口点。此功能与内置渲染管道不兼容。 Unity 会自动调用此方法。在独立应用程序中,Unity 每帧调用一次此方法来渲染主视图,每帧调用一次Camera.Render。在 Unity 编辑器中,对于每个可见的场景视图或游戏视图,Unity 每帧调用一次此方法,如果场景摄像机预览可见,则每帧调用一次,对于每个摄像机每帧调用一次Camera.Render URP实现 12345678910111...

C#

C#
7.8k words
Desc:记录阅读源码中笔记 字符串优化:引用 ArrayList:原文 实现了 IList、ICloneable 接口 代码 12345678910111213141516171819202122232425262728public virtual void CopyTo(Array array) { CopyTo(array, 0);} // Copies this ArrayList into array, which must be of a // compatible array type. //public virtual void CopyTo(Array array, int arrayIndex) { if ((array != null) && (array.Rank != 1)) throw new ArgumentException(Environment.GetResourceString("Arg_RankMultiDimNotSupported"));...
11k words
Desc:在看实时渲染中做的记录,根据QianMo翻译后的文章进行学习,链接引用, https://github.com/QianMo/Real-Time-Rendering-3rd-CN-Summary-Ebook 图形渲染管线分为四个阶段: 应用阶段、几何阶段、光栅化阶段、像素处理阶段(RealTimeRenderer4th中的提出) 应用阶段通过软件的方式实现的阶段,开发者能够对该阶段发送的情况完全控制,改变实现方法来改变实际性能。其他阶段,全部或部分建立在硬件基础上,改变实现过程会非常困难 虽然不能分为若干个子阶段,但是可以在几个并行处理器上同时执行。超标量体系结构,可以在同一阶段实现不同的几件事 通常实现的方法: 碰撞检测、加速算法、输入检测、动画、力反馈以及纹理动画,变换仿真、几何变形,以及一些不在其他阶段执行的计算(层次视锥裁剪等加速算法) 主要任务: 末端,将需要在屏幕上显示出来绘制的集合体(图元:点、线、矩形)输入到绘制管线的下一个阶段 将摄像机位置、光照、模型的图元输出到管线的下一个阶段 几何阶段细分的功能阶段管线: ...
14k words
Desc:Unity中渲染的物体都是由网格构成的,而网格的绘制单元是图元(点、线、三角面)。绘制信息都存储在VertexHelper类中,除了顶点外还有法线、UV、顶点色、切线以及相关函数 代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475/// <summary>/// A utility class that can aid in the generation of meshes for the UI./// </summary>/// <remarks>/// This class implements IDisposable to aid with memory management./// </remarks>/// <example>/// <code>///...
776 words
Desc:略 向量细节 矩阵细节 四元数在游戏中,往往用于插值运算物体的旋转,相对于矩阵的运算,能够减少运算量并且只用存储四个浮点值link 加速度A=(v1-v0)/tv=v0+(a*t) Vector3 acceleration = new Vector3(playerInput.x, 0f, playerInput.y) * maxSpeed;velocity += acceleration * Time.deltaTime;Vector3 displacement = velocity * Time.deltaTime; 应用角色移动 贝塞尔曲线源 GPU的有界Bezier 通过判断函数的正负值,可以判断像素位于曲线内部(<0),还是在曲线外部(>0) 分段 Bezier 曲线 通过让连接处的切线相互平行且长度相等来改善连续性 优点: 可以使用一些低阶曲线来表示,并且最终曲线将会经过一组控制点 曲线艺术编程 coding curves 第八章 贝赛尔曲线(Bézier Curves)...
16k words
DescCore目录下的多个核心模块,Culling(裁剪)、Layout(布局)、MaterialModifiers(材质球修改器)、SpecializedCollections(收集)、Utility(实用工具)、VertexModifiers(顶点修改器) Culling(裁剪)对模型裁剪的工具类,大都用在了Mask遮罩上,只有Mask才有裁剪的需求 代码 12345678910111213141516171819202122232425262728293031323334353637383940414243Clipping.cs传入 RectMask2D 列表,计算出他们重叠部分的区域/// <summary>/// Find the Rect to use for clipping./// Given the input RectMask2ds find a rectangle that is the overlap of all the inputs./// </summary>/// <param name="rectMa...
24k words
Desc:Unity3D公开了大部分UGUI系统源码,除了渲染和网格合并算法外(Canvas和CanvasRenderer),UGUI内核源码将UGUI系统分为输入事件、动画、核心渲染三部分 输入事件源码:UGUI系统将输入事件模块分为四部分,即事件数据模块(EventData)、输入事件捕获模块(InputModules)、射线碰撞检测模块(Raycasters)、事件逻辑处理及回调模块(EventHandle…) 事件数据模块:作用: 主要定义并且存储了事件发生时的位置、与事件对应的部分、事件的位移大小、触发事件的输入类型及事件的设备信息。事件数据模块主要是为了获取数据,提供数据服务 BaseEventData: 作为PointerEventData和AxisEventData的基类,提供了几个常用的接口,其子类PointerEventData是最常用的事件数据。代码并不多,大部分都是数据定义 代码 12345678910111213141516171819202122232425262728/// <summary>/// A class tha...
13k words
Desc:UGUI是在3d网格下建立的UI系统,每个可显示的元素都是通过3D模型网格的形式构建起来的。当UI系统被实例化时,UGUI系统首先要做的就是构建网格 运行原理:如果每个元素都生成一个模型且绑定一个材质球存入一张图片,那么界面上成千上万个元素就会拥有成千上万个材质球,以及成千上万张图。UGUI对此的优化是,将一部分相同类型的图片集合起来合成一张图,然后将拥有相同图片、相同着色器的材质球指向同一个材质球,并且将分散开的模型、网格合并起来,这样就生成几个大网格和几个不同图集的材质球,以及少许整张的贴图,节省了很多材质球、图片、网格的渲染,提升UI系统的效率 注意:并不是把所有网格和材质球都合并成一个,因为这样模型前后层级就会有问题,只是把相同层级的元素,以及相同层级上拥有相同材质球参数的网格进行合并处理。 优化的方式就是合并更多的元素,减少重构网格的次数 (合并网格中的模型如果发生移动或者销毁会导致网格重新构建) RawImage组件能展示单张图片,但无法参与合并(不适用图集而使用RawImage展示单张图片时,通常是因为图片尺寸过大而导致合并图集效率低,或者相同类型的图片数...
8.4k words
Desc:使用数据表实现多语言、根据数据表生成相关数据类,数据包相当于一个外部的数据库,数据库中存放着与游戏人物相关的数据,只不过这个数据库里的数据是不能更改的 localization:最开始的思路通过Txt文本存储相关数据,相当于指定一个规则,指定的键对应相关的值,程序根据设定的键去读取,策划对txt修改值的详细数值,同时可以保证多个模块中数据的一致 12m_test=213m_npcNum=4 数据的读取,在游戏运行时,读取txt,将数据结果通过‘=’分割成key、value存入字典中 12345678910111213141516171819202122232425262728293031* 初始化数据,存入字典中TextAsset file=Resources.Load<TextAsset>(path);string[] lines = file.text.Split('\n');foreach(string line in lines){ if (string.IsNullOrEmpty(line)) con...